package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int)
	quit := make(chan bool)

	//新开一个协程
	go func() {
		for {
			select {
			case num := <-ch:
				fmt.Println("num = ", num)

			case <-time.After(3 * time.Second): //超过三秒没有IO 的情况就说明超时了，这时quit将被赋值则程序自然就结束了
				fmt.Println("超时")
				quit <- true
			}
		}

	}()

	for i := 0; i < 5; i++ {
		ch <- i
		time.Sleep(time.Second * 2) //三秒一次是不行的，因为这里是休眠了3秒，程序运行也是需要一点点时间的。
		// 可是另一个goroutine在一直判断情况如果超过3秒就超时了
	}

	<-quit
	fmt.Println("程序结束")
}
